
Error al asignar valor a Celda VB-Excel.
Publicado por JuantxooxtnauJ (3 intervenciones) el 12/04/2022 12:36:59
Buenos días...
No soy muy versado en VB-Excel, pero he hecho algunas cosas...
Y estoy atascado con una función, que no hay manera que eche a andar...
La base esta sacada de: [url]]'https://es.extendoffice.com/documents/excel/4417-excel-play-sound-if-condition-is-true.html[/url]
y lo que hace es, si se cumple la condición, emite un sonido.
La idea es utilizarlo en un cuadro de mandos, que se actualiza desde una coleccion de datos, cada x minutos.
Esta es la llamada al modulo... =SI(Y($C$15>=$C$13;HORA(AHORA())<16;HORA(AHORA())>7);SoundMe2();"")
Cuando se actualiza, cambia múltiples valores, por lo que quiero que solo se ejecute una vez por minuto, como máximo. Si no, cada actualización pita varias veces...
Para esto, en la celda: F1 almaceno el minuto actual, y lo comparo. Si es igual, no hace nada. Si ha variado, pongo ese minuto en la celda, y emite el sonido... Y aquí es donde falla...
He probado a declarar las variables como integer, como double, a pasar el valor... pero no hay manera. Falla en la linea:
Worksheets("CMI").Range("F1").Value = MinutoNow
La hoja se llama CMI, y la referencio directamente...
A ver si un alma caritariva....
GRACIAS!!!
No soy muy versado en VB-Excel, pero he hecho algunas cosas...
Y estoy atascado con una función, que no hay manera que eche a andar...
La base esta sacada de: [url]]'https://es.extendoffice.com/documents/excel/4417-excel-play-sound-if-condition-is-true.html[/url]
y lo que hace es, si se cumple la condición, emite un sonido.
La idea es utilizarlo en un cuadro de mandos, que se actualiza desde una coleccion de datos, cada x minutos.
Esta es la llamada al modulo... =SI(Y($C$15>=$C$13;HORA(AHORA())<16;HORA(AHORA())>7);SoundMe2();"")
Cuando se actualiza, cambia múltiples valores, por lo que quiero que solo se ejecute una vez por minuto, como máximo. Si no, cada actualización pita varias veces...
Para esto, en la celda: F1 almaceno el minuto actual, y lo comparo. Si es igual, no hace nada. Si ha variado, pongo ese minuto en la celda, y emite el sonido... Y aquí es donde falla...
He probado a declarar las variables como integer, como double, a pasar el valor... pero no hay manera. Falla en la linea:
Worksheets("CMI").Range("F1").Value = MinutoNow
La hoja se llama CMI, y la referencio directamente...
A ver si un alma caritariva....
GRACIAS!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Global MinutoNow As Double
#If Win64 Then
Private Declare PtrSafe Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As LongPtr, ByVal dwFlags As Long) As Boolean
#Else
Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Boolean
#End If
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000
Function SoundMe2() As String
'Updateby Extendoffice 20161223
' On Error Resume Next
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Dim Minuto As Double
Dim MinutoNow As Double
Dim hora As Double
MinutoNow = (Minute(Now()))
Minuto = (Worksheets("CMI").Range("F1").Value)
hora = Hour(Now())
If Val(Worksheets("CMI").Range("F1").Value) <> MinutoNow Then
Worksheets("CMI").Range("F1").Value = MinutoNow
If hora > 7 And hora < 16 Then
If MinutoNow <> Minuto Then
Call PlaySound("c:\windows\media\Speech On.wav", _
0, SND_ASYNC Or SND_FILENAME)
End If
End If
SoundMe2 = "ALERTA!"
End If
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic
End Function
Valora esta pregunta


0