Hej, om det nu är VB eller VBA man använder sig av i Excel så borde det väl i alla fall se ungefär likadant ut? >> ...VB eller VBA ... i Excel ... ungefär likadant ut? <br> Mitt förslag på lösning: Hej, Jag tycker En select case ger en bättre överblick en en if sats. Desutom kan man lätt ändra den för att acceptera flera kommando. T.ex. om mna har tre knappar: Yes, No och Cancel. Men det blir lite grötigt med hela meddelandet. Hanterar alla mina msgbox'ar med select cas. Är kättare och mer tydligt tycker jag. Desutom slipper man lagra svaret i en variabel. ;O) Andreas,VB i Excel (får ett konstigt felmeddelande - förstår någon d
Har ett kalkylblad i ett vanligt Excelark och ibland kan man tänka sig att man vill radera siffrorna i ett gäng kolumner/rader där. Dock vill jag att användaren skall få en liten trevlig varning om att man verkligen tar bort siffrorna för gott om man gör det.
Nedanstående kod tycker jag ser rätt ut - men det är den inte (felmeddelandet tar vi efter koden...)
-----------------------
Dim myResult As VbMsgBoxResult
MsgBox("OBS - denna ändring raderar all befintlig data på denna sidan och kan inte göras ogjord." & vbNewLine & "Vill du verkligen radera alla vackra siffror?", vbOKCancel, "Är du säker på att du vill radera siffrorna?") As myResult
If myResult = 1 Then
Range("B7:F22").Select
Selection.ClearContents
Range("B7").Select
Else
' användaren klickade inte ok
End If
------------------------
Felmeddelandet jag får är:
"Kompileringsfel:
Programsatsen är ogiltlig utanför Type-block."
Ehh... jaha? Vad innebär det?
En snabb klick på "help" i den dialogruta som visar ovanstående kompileringsfel säger:
-------------------
"Statement invalid outside Type block
The syntax for declaring variables outside a Type...End Type statement block is different from the syntax for declaring the elements of the user-defined type. This error has the following causes and solutions:
You tried to declare a variable outside a Type...End Type block or outside a statement.
When declaring a variable with an As clause outside a Type...End Type block, use one of the declaration statements, Dim, ReDim, Static, Public, or Private. For example, the first declaration of MyVar in the following code generates this error; the second and third declarations of MyVar are valid:
MyVar As Double ' Invalid declaration syntax.
Dim MyVar As Double
Type AType
MyVar As Double ' This is valid declaration syntax
End Type ' because it's inside a Type block.
You used an End Type statement without a corresponding Type statement.
Check for an unmatched End Type, and either precede its block with a Type statement, or delete the End Type statement if it isn't needed.
For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh)."
---------
Men jag har ju deklarerat variablen "myResult" innan jag använder den (något som är fel där?) och jag använder ingen "type". All kod jag använder har jag klistrat in ovan (ja - den ligger ju i en sub - men det finns ingen annan kod i den suben - och ja - det finns en "End Sub".
Tacksom om någon skarpsynt skulle kunna hjälpa mig!?Sv: VB i Excel (får ett konstigt felmeddelande - förstår någ
Det är VBA. Koden är ganska lik. Finns dock väsentliga skillnader. VBA är en delmängd av VB.
Nåväl, rätt version av din kod är:
<code>
Dim myResult As VbMsgBoxResult
myResult = MsgBox("OBS - denna ändring raderar all befintlig data på denna sidan och kan inte göras ogjord." & vbNewLine & "Vill du verkligen radera alla vackra siffror?", vbOKCancel, "Är du säker på att du vill radera siffrorna?")
If myResult = 1 Then
Range("B7:F22").Select
Selection.ClearContents
Range("B7").Select
Else
' användaren klickade inte ok
End If
</code>
Jag skulle dock välja att skriva så här:
<br>
<code>
If MsgBox("OBS - denna ändring raderar all befintlig data på denna sidan och kan inte göras ogjord." & vbNewLine & "Vill du verkligen radera alla vackra siffror?", vbOKCancel, "Är du säker på att du vill radera siffrorna?")=vbOK Then Range("B7:F22").ClearContents
</code>
Man bör egentligen inte använda Range() med en sträng som argument. Åtminstone inte om det skall vara effektivt. Och man bör absolut inte använda Range(...).Select, och sedan göra grejer på Selection.
Snarare :
<br>
With Range(...)
...
End with
/Niklas JanssonSv: VB i Excel (får ett konstigt felmeddelande - förstår någ
<code>
Select Case MsgBox("OBS! Denna ändring raderar all befintlig data på denna sidan och kan inte göras ogjord." & vbCrLf & "Vill du verkligen radera alla vackra siffror?", vbYesNo Or vbQuestion, "Är du säker på att du vill radera siffrorna?")
Case vbYes
Range("B7:F22").ClearContents
Range("B7").Select
Case Else
' användaren klickade inte ok
End Select
<code>Sv: VB i Excel (får ett konstigt felmeddelande - förstår någ
Niklas har helt rätt i det han skriver om att inte aktivera ett cellområde för att utföra en aktivitet i det och att undvika Range-objektet vid val av en enstaka cell.
Det som underlättar ytterligare är att använda sig av namngivna cellområden samt att ge en bättre strukturer.
Select Case finner jag vara mindre nödvändig i denna frågeställning.
Här kommer mitt lilla bidrag:
<code>
Option Explicit
Sub Visa_Excel_VBA()
Dim sMedd As String, sTitel As String, sSvar As String
sMedd = "Denna ändring raderar all befintlig data på denna sidan" & vbCrLf _
& "och kan inte ångras." & vbCrLf _
& "Vill du verkligen radera alla vackra siffror?"
sTitel = "Ta bort data?"
sSvar = MsgBox(sMedd, vbYesNo Or vbCritical, sTitel)
If sSvar = vbYes Then
Range("Indata") = ""
Cells(7, 2).Activate
Else
'..............................
End If
End Sub
</code>
Jo, vi kan även skapa en procedur för att kunna ångra ovanstående kommando ;-)
Mvh
Dennis Sv: VB i Excel (får ett konstigt felmeddelande - förstår någ
Sv: VB i Excel (får ett konstigt felmeddelande - förstår någ
Generellt är jag benägen att hålla med dig om Select-ansatsens värde, inte minst när antalet möjliga utfall ökar men just för denna frågeställning tycker jag att det är nöjsamt med en IF-sats ;-)
Mvh
Dennis