15. august 2011 - 13:38Der er
19 kommentarer og 1 løsning
Start makro når celle ændres
Hej alle
Jeg ønsker at sætte makro4 igang når celle BQ23 skifter fra ikke at have noget indhold til at have et tal i sig. Jeg har fundet frem til følgende kode, hvor der bare ikke sker noget:
Private Sub Worksheet_Change1(ByVal Target As Range) If Target.Range("bq23") <> "" Then Makro4 End If
Der sker ikke noget. Jeg fik først en besked om "Ambiguous name", og skiftede derfor navn til:
Private Sub Worksheet_Change1(ByVal Target As Range)
Altså med 1 efter change. Jeg har nemlig en anden Private sub Worksheet change procedure ovenover. Ved ikke om det har nogen betydning, men der var ingen protester, men altså heller ingen handling.
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim DoSendSMS As Boolean Dim besked As String Dim result As String DoSendSMS = False For Each c In Application.Names("WatchArea").RefersToRange.Cells If c <> "" Then DoSendSMS = True besked = besked & c.Text & " " End If Next If DoSendSMS Then For Each c In Application.Names("Specialtegn").RefersToRange.Cells besked = Replace(besked, c.Value, c.Offset(0, 1).Value) Next besked = Replace(besked, Chr(10), "%0A%0D") 'Håndtering af linjeskift
If Len(besked) > 459 Then ' MsgBox "Besked for lang " & Len(besked) & vbCrLf & besked besked = "For mange data til, at de kunne sendes" End If 'result = sendSMS(Application.Names("SendFra").RefersToRange.Value, Application.Names("SendTil").RefersToRange.Value, besked) End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim DoSendSMS As Boolean Dim besked As String Dim result As String DoSendSMS = False
If Target.Address = "$BQ$23" And IsNumeric(Target.Value) = True Then testMakro Else For Each c In Application.Names("WatchArea").RefersToRange.Cells If c <> "" Then DoSendSMS = True besked = besked & c.Text & " " End If Next If DoSendSMS Then For Each c In Application.Names("Specialtegn").RefersToRange.Cells besked = Replace(besked, c.Value, c.Offset(0, 1).Value) Next besked = Replace(besked, Chr(10), "%0A%0D") 'Håndtering af linjeskift
If Len(besked) > 459 Then ' MsgBox "Besked for lang " & Len(besked) & vbCrLf & besked besked = "For mange data til, at de kunne sendes" End If 'result = sendSMS(Application.Names("SendFra").RefersToRange.Value, Application.Names("SendTil").RefersToRange.Value, besked) End If End If End Sub Private Sub testMakro() MsgBox "BQ23 indeholder nu et tal" End Sub
Jeg har flettet koden ind i bunden af den første Worksheet_Change Men der sker stadig ikke noget. Hvordan vil du skrive den sammen?
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim DoSendSMS As Boolean Dim besked As String Dim result As String DoSendSMS = False For Each c In Application.Names("WatchArea").RefersToRange.Cells If c <> "" Then DoSendSMS = True besked = besked & c.Text & " " End If Next If DoSendSMS Then For Each c In Application.Names("Specialtegn").RefersToRange.Cells besked = Replace(besked, c.Value, c.Offset(0, 1).Value) Next besked = Replace(besked, Chr(10), "%0A%0D") 'Håndtering af linjeskift
If Len(besked) > 459 Then ' MsgBox "Besked for lang " & Len(besked) & vbCrLf & besked besked = "For mange data til, at de kunne sendes" End If 'result = sendSMS(Application.Names("SendFra").RefersToRange.Value, Application.Names("SendTil").RefersToRange.Value, besked)
Du har også flettet de to koder ( der intet har med hinanden at gøre), sammen. Jeg ser du bruger "Else". Betyder det så ikke at hvis udsagnet er sandt så udføres makro4, men ikke den "første", worksheet change kode?
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim DoSendSMS As Boolean Dim besked As String Dim result As String DoSendSMS = False
If Target.Address = "$BQ$23" And IsNumeric(Target.Value) = True Then testMakro End If
For Each c In Application.Names("WatchArea").RefersToRange.Cells If c <> "" Then DoSendSMS = True besked = besked & c.Text & " " End If Next If DoSendSMS Then For Each c In Application.Names("Specialtegn").RefersToRange.Cells besked = Replace(besked, c.Value, c.Offset(0, 1).Value) Next besked = Replace(besked, Chr(10), "%0A%0D") 'Håndtering af linjeskift
If Len(besked) > 459 Then ' MsgBox "Besked for lang " & Len(besked) & vbCrLf & besked besked = "For mange data til, at de kunne sendes" End If 'result = sendSMS(Application.Names("SendFra").RefersToRange.Value, Application.Names("SendTil").RefersToRange.Value, besked) End If End Sub Private Sub testMakro() MsgBox "BQ23 indeholder nu et tal" End Sub
Ok, man kan selvfølgelig sige, at først bliver den ene udført, og derefter den anden. jeg har derfor erstatter den gamle kode med din, men stadig ingen handling.
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim DoSendSMS As Boolean Dim besked As String Dim result As String DoSendSMS = False
If Target.Address = "$BQ$23" And IsNumeric(Target.Value) = True Then testMakro End If
For Each c In Application.Names("WatchArea").RefersToRange.Cells If c <> "" Then DoSendSMS = True besked = besked & c.Text & " " End If Next If DoSendSMS Then For Each c In Application.Names("Specialtegn").RefersToRange.Cells besked = Replace(besked, c.Value, c.Offset(0, 1).Value) Next besked = Replace(besked, Chr(10), "%0A%0D") 'Håndtering af linjeskift
If Len(besked) > 459 Then ' MsgBox "Besked for lang " & Len(besked) & vbCrLf & besked besked = "For mange data til, at de kunne sendes" End If 'result = sendSMS(Application.Names("SendFra").RefersToRange.Value, Application.Names("SendTil").RefersToRange.Value, besked) End If End Sub Private Sub testMakro() MsgBox "BQ23 indeholder nu et tal" End Sub
Denne udgave skulle virke - din egen koden med en lille ændring:
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim DoSendSMS As Boolean Dim besked As String Dim result As String DoSendSMS = False For Each c In Application.Names("WatchArea").RefersToRange.Cells If c <> "" Then DoSendSMS = True besked = besked & c.Text & " " End If Next If DoSendSMS Then For Each c In Application.Names("Specialtegn").RefersToRange.Cells besked = Replace(besked, c.Value, c.Offset(0, 1).Value) Next besked = Replace(besked, Chr(10), "%0A%0D") 'Håndtering af linjeskift
If Len(besked) > 459 Then ' MsgBox "Besked for lang " & Len(besked) & vbCrLf & besked besked = "For mange data til, at de kunne sendes" End If 'result = sendSMS(Application.Names("SendFra").RefersToRange.Value, Application.Names("SendTil").RefersToRange.Value, besked) End If '<----------- flyttet
If Range("$BQ$23").Value <> "" Then Makro4 End If End Sub
Nu har jeg lige opdaget et andet problem. Det skal faktisk ikke kun være celle BQ23, der skal indeholde tal for at makroen går igang. Hvis tal forekommer i en eller flere af cellerne BQ23:BQ43 skal eksekution forekomme. Jeg har derfor ændret til:
If Range("BQ23:BQ43").Value <> ""
Både med og uden $ tegn, begge gange får jeg "type mismatch".
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.