# VBA Scribt



## Canopus231171 (15 März 2018)

Hallo,

ich versuche eine If Schleife in Excell zu programmieren.

eigentlich recht einfach wenn man weiß wie es geht. 

Zelle G3 hat verschiedene Datentypen zur Auswahl. BOOL;INT;DINT;REAL
Zelle F3 hat die Bits 0..7 zur Auswahl.

Ich möchte wenn Zelle G3 *nicht* den WERT "BOOL" hat, das F3 entweder auf 0 gesetzt wird oder noch besser, die Celle F3 als nicht aktiv gesetzt wird.
Jetzt kommen eure Ideen ins Spiel, ich hab´s nicht mit VB...


----------



## Boxy (15 März 2018)

Wie möchtest Du unterscheiden, ob 1=Int oder 1=Bool ist um dann die Zelle F3 zu deaktivieren ?

Außerdem finde ich , das es gerade im Bereich Excel VBA sehr viele Beispiele im Netz gibt!
Also wenn man Excel VBA For-Schleife oder For Next bei Googel sucht findet man zig gute Hinweise.
Gerade z.B. unter www.herber.de findet man sehr viel gute Infos ...



```
For iCounter = 1 To 6
      Cells(iCounter, 1).Value = "Zeile " & iCounter
   Next iCounter
```


und einen Zelle kann man nach folgendem Bsp. sperren


```
[/FONT]Cells("F", 3).Select
Selection.Locked = True
[FONT=arial]
```


----------



## A3Q (15 März 2018)

Wenn du es nicht unbedingt als VBa brauchst, kannst du es auch über die Datenprüfung und einer Formel regeln.


----------



## Azrael666 (19 März 2018)

Ansonsten kannst es noch wie folgt machen:

Den Text in Zelle G3 in eine Stringvariable einlesen. Dann eine Case Anweisung auf die Stringvariable. Und dann kannst du bei jedem Case festlegen was mit deiner Zelle F3 passieren soll.


----------



## Canopus231171 (20 März 2018)

Mit diesem Code habe ich es nun realisiert.


Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address = "$G$3" Then
    If Not Target.Value = "BOOL" Then


        Target.Parent.Unprotect
        Target.Locked = False
        Target.Parent.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True

        Range("$F$3").Parent.Unprotect
        Range("$F$3").Interior.Color = RGB(254, 0, 0)
        Range("$F$3").Locked = True
        Range("$F$3").Parent.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
    Else
        Range("$F$3").Parent.Unprotect
        Range("$F$3").Interior.Color = RGB(0, 254, 0)
        Range("$F$3").Locked = False
        Range("$F$3").Parent.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True

    End If

End If

End Sub


----------



## Canopus231171 (20 März 2018)

1. Die drei IF Anweisungen würde ich gerne als _UND_ Verknüpfung programmieren, in etwa 
    If (ActiveSheet.CheckBoxes("114").Value = 1) AND (Target.Address = "$D$3") AND (Target.Value = "I") Then 
*
(Target.Value = "I" bezieht sich aus "$D$3" die Zelle kann mit I oder Q ausgewählt werden)*


2.  In Zelle "$K$3"   steht ein Wert z.B. "I0.1" dieser Wert soll z.B in Zelle "$C$3"  übernommen werden und zusätzlich die Variable IBN angehängt werden . Der Wert in Zelle C3 sollte dann         "I0.1_IBN" ausgegeben werden.

Sub Kontrollkästchen114_Klicken()

If ActiveSheet.CheckBoxes("114").Value = 1 Then
 If Target.Address = "$D$3" Then
  If Target.Value = I Then
    Range("$B$3").Value "Wert aus $K$3.IBN"
    Range("$C$3").Value "Wert aus $K43.StartUp"
  Else
    Range("$B$3").Value "n.v."
    Range("$C$3").Value "n.v."
  End If
 End If
End If



End Sub


----------



## Canopus231171 (21 März 2018)

Ich möchte die Zeilennummer als Variable Declarieren,  wie auf dem Bild. Zeile hat den Wert 10  
( Gelesen werden soll "Tabelle Code" "Spalte H" "Zeile 10" wie muss ich das Programmieren ??? Habe schon einige Varianten durch => anstatt Range("Code!H10") soll Range("Code!H(Zeile)").


----------



## PN/DP (21 März 2018)

Canopus231171 schrieb:


> anstatt Range("Code!H10") soll Range("Code!H(Zeile)").




```
Cells(zeile, spalte) ...
Cells(zeile, 8) ... [COLOR="#008000"]'8 = H[/COLOR]
Worksheets("Code").Cells(zeile, spalte) ...
With Worksheets("Code")
  .Cells(zeile, spalte) ...
```

Harald


----------



## Heinileini (21 März 2018)

Canopus231171 schrieb:


> ich versuche eine If Schleife in Excell zu programmieren.
> eigentlich recht einfach wenn man weiß wie es geht.


Und wahrscheinlich so richtig banal, wenn man wüsste, was Du mit "If Schleife" meinst!​Eine ProgrammSchleife, die abhängig von einer Bedingung ausgeführt wird oder eine (oder mehrerere) If-Abfrage, die in einer ProgrammSchleife vorkommen?

​


> Zelle G3 hat verschiedene Datentypen zur Auswahl. BOOL;INT;DINT;REAL
> Zelle F3 hat die Bits 0..7 zur Auswahl.
> Ich möchte wenn Zelle G3 *nicht* den WERT "BOOL" hat, das F3 entweder auf 0 gesetzt wird oder noch besser, die Celle F3 als nicht aktiv gesetzt wird.


Was darf ich mir unter "hat zur Auswahl" vorstellen? Hat das etwas mit den CheckBoxes zu tun, von denen Du in #6 schreibst?

Meinst Du Datentyp, wenn Du Datentyp schreibst und meinst Du den Text "BOOL", wenn Du "Wert BOOL" schreibst?
Was bedeutet "die Celle F3 als nicht aktiv gesetzt wird"? Es können mehrere Zellen selektiert werden und eine (1) davon kann aktiviert sein. 
Sobald Du eine andere als Zelle F3 selektierst oder aktivierst, ist F3 nicht mehr die aktive Zelle.



Canopus231171 schrieb:


> If Not Target.Value = "BOOL" Then


Siehe oben, hier wird abgefragt, ob der Text "BOOL" in der Zelle steht, nicht ob ihr Datentyp BOOL ist.


> Range("$F$3").Parent.Unprotect


Mit parent habe ich in diesem Zusammenhang noch nie gearbeitet ... ich weiss gar nicht, was hier gemeint ist ... könnte mir vorstellen das Arbeitsblatt? Muss ich gleich mal ausprobieren.
Gruss, Heinileini

PS:
Statt Range("A1") kann man auch Range("A" & VariableMitZeilenNr) oder Range(VariableMitSpaltenBuchstabe$ & "1") oder Range(VariableMitSpaltenBuchstabe$ & VariableMitZeilenNr) schreiben, wobei 
- VariableMitSpaltenBuchstabe$ eine StringVariable ist, die den Buchstaben enthält und​- VariableMitZeilenNr eine numerische oder StringVariable ist, die die ZeilenNr enthält.

Bemerkenswert und manchmal auch nützlich die Schreibweise:
Range(Cells(1,2),Cells(3,4)). ... um einen zusammenhängenden Bereich von Zellen anzusprechen (1 steht hier für Zeile der Zelle oben links, 2 für Spalte der Zeile oben links, 3 für Zeile der Zelle unten rechts, 4 für Spalte der Zeile unten rechts.​​*[SUB][/SUB]* ​ ​​


----------



## Canopus231171 (4 April 2018)

Die IP Addresse wird in Excel aufgeschlüsselt und  A10, B10, C10, D10 abgespeichert.
A10 soll in die Variable IP1, B10 in IP2, C10 in IP3 und D10 in IP4 kopiert werden.

Anschließend sollte daraus die IP Addresse wieder zusammengesetzt werden aber wie??

   "TEXT;http:// IP1.IP2.IP3.IP4 /FileBrowser/Download?Path=/DataLogs/myDataLog1a.csv" _
        , Destination:=Range("Data_PLC!$A$1"))





Dim IP1 As String
Dim IP2 As String
Dim IP3 As String
Dim IP4 As String


Sub csvHolen()


IP1 = "$A$10"
IP2 = "$B$10"
IP3 = "$C$10"
IP4 = "$D$10"




Range("A1").Select
    ActiveCell.FormulaR1C1 = "CSV Datei laden"
    Columns("A:A").ColumnWidth = 13.44


    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic

        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With




    Selection.ClearContents

      With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;http://IP1.IP2.IP3.IP4/FileBrowser/Download?Path=/DataLogs/myDataLog1a.csv" _
        , Destination:=Range("Data_PLC!$A$1"))


----------



## Heinileini (4 April 2018)

Variable$ = "TEXT;http://" & IP1 & IP2 & IP3 & IP4 & "/FileBrowser/Download?Path=/DataLogs/myDataLog1a.csv"
?
​


----------



## Canopus231171 (5 April 2018)

Heinileini schrieb:


> Variable$ = "TEXT;http://" & IP1 & IP2 & IP3 & IP4 & "/FileBrowser/Download?Path=/DataLogs/myDataLog1a.csv"
> ?
> ​



Der Vorschlag ist soweit annehmbar, ich bekomme aber den Wert der Zelle nicht in die Variable kopiert.​


----------



## PN/DP (5 April 2018)

```
IP1 = Range("Data_PLC!$A$5")
[COLOR="#008000"]'oder[/COLOR]
IP1 = ActiveSheet.Range("$A$5")
[COLOR="#008000"]'oder[/COLOR]
IP1 = Worksheets("Data_PLC").Range("$A$5")
[COLOR="#008000"]'oder[/COLOR]
IP1 = Worksheets("Data_PLC").Cells(5, 1) [COLOR="#008000"]'Zeile 5 Spalte 1 ist $A$5[/COLOR]
[COLOR="#008000"]'oder[/COLOR]
...
```

Harald


----------

