2017-01-08 6 views
2

Ich versuche zu finden, wenn es einen bestimmten Titel für eine Zelle gibt, übergeben Sie die Adresse dieser Zelle an eine Variable und verwenden Sie diesen Speicherort, um die Größe der Spalte anzupassen. Der Grund, warum ich das mache, ist, weil ich mehrere Funktionen schreibe, die die Position der Spalten verschieben. Ich würde es begrüßen, wenn jemand einen Blick darauf werfen und mir sagen könnte, was ich falsch mache.Excel VBA Adresse finden und zuweisen, dann Wert wiederverwenden

Option Explicit 

Sub adjustColumns() 

Dim PONumberCell As String 
Dim PONumberAddress As Range 
Dim TopLabelinColumn As Range 

For Each TopLabelinColumn In Range("A1:Z1").Cells 
    If TopLabelinColumn Like "PO_NUMBER" Then TopLabelinColumn.Value = "PO" 
    PONumberCell = TopLabelinColumn.Address 

    Set PONumberAddress = PONumberCell 
    PONumberAddress.ColumnWidth = 70 

Next TopLabelinColumn 

End Sub 
+0

'Set PONumberAddress = PONumberCell' wahrscheinlich 'Set PONumberAddress = TopLabelinColumn' (oder, weniger effizient,' Set PONumberAddress = Range (PONumberCell) ') (Und wenn Sie nicht ** alle ** die Zellen verarbeiten möchten, die' Like "PO_NUMBER" 'sind, würde es "Exit For" ist eine gute Idee, sobald Sie die Zelle gefunden haben, an der Sie interessiert sind.) – YowE3K

+0

Ändern Sie die Breite Ihrer Spalte mit 'PONumberAddress.Columns.ColumnWid th = 70' –

Antwort

2

bearbeiten nach OP der weiteren Anfrage:

Sie ein Range-Objekt sind verwirrend (wie PONumberCell sollte sein) mit einem String Variable eines (wie PONumberAddress), so

Set PONumberAddress = PONumberCell 

funktioniert nicht, weil Sie eine object Variable auf einen String ein

zuweisen versuchen, aber Sie können effektiver sein sollte, die Schleife zu vermeiden und mit Hilfe der Find() Methode

Option Explicit 

Sub adjustColumns() 
    Dim PONumberAddress As String 
    Dim PONumberCell As Range 

    Set PONumberCell = Range("A1:Z1").Find(what:="PO_NUMBER", LookIn:=xlValues, lookat:=xlPart, MatchCase:=False) 
    If Not PONumberCell Is Nothing Then 
     With PONumberCell 
      .value = "PO" 
      PONumberAddress = .Address 
      .EntireColumn.ColumnWidth = 70 
     End With 
    Else 
     Set PONumberCell = Range("A1:Z1").Find(what:="PO", LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False) '<--| if it didn't find "PO_NUMBER" then it seaches for a complete match of "PO" 
     If Not PONumberCell Is Nothing Then PONumberCell.EntireColumn.ColumnWidth = 70 
    End If 
End Sub 
+0

Danke Leute, deine Antworten haben es definitiv für mich geklärt. Ich habe eine Menge dieser Überschriften und Ihre Hilfe ist ein großer Schritt in die richtige Richtung. Benötige ich auch eine zweite If-Anweisung, um sicherzustellen, dass ich die Größe auf 70 zurücksetzen kann, auch nachdem der Wert auf "PO" gesetzt wurde? – Robinsper

+0

Gern geschehen. Ich bekomme Ihre "Auch" -Frage nicht: Könnten Sie genauer sein? – user3598756

+0

Es tut mir wirklich leid für die späte Antwort, ich tippte es eine Minute, nachdem ich Ihre Antwort gesehen hatte und aus irgendeinem Grund wurde es nicht gepostet. Meine Frage ist, wenn ich den Code laufen lasse und "PO_NUMBER" gefunden wird, die Spalte in "PO" umbenannt wird und die Größe auf 70 gesetzt wird, sage ich manuell die Größe auf 100 und möchte jetzt den Code zum Zurücksetzen ausführen bis 70 wird das With nicht ausgeführt, da die Spalte bereits "PO" und nicht "PO_NUMBER" ist.Bitte lassen Sie mich wissen, wenn das klar ist. Es ist 4:15 Uhr, wo ich bin und es wird schwer, wach zu bleiben, also entschuldige ich mich im Voraus, wenn ich erst später auf deinen nächsten Beitrag antworte. – Robinsper

1

die Kommentare über Folgen, gibt es ein paar erros im Code sind:

  1. Einstellen der PONumberAddress Range, müssen Sie die Syntax verwenden: Set PONumberAddress = Range(PONumberCell) die Adress-String in Klammern gefunden mit .

  2. Um die Spaltenbreite einzustellen, verwenden Sie: PONumberAddress.Columns.ColumnWidth = 70.

  3. Nach Ihrem Beitrag, ich glaube, Sie für Spalten dies nur tun wollen, wo die Überschrift „PO_NUMBER“ ist, also Sie den Code alle unten benötigen inisde Ihre If: If TopLabelinColumn.Value Like "PO_NUMBER" Then.

-Code

Option Explicit 

Sub adjustColumns() 

Dim PONumberCell As String 
Dim PONumberAddress As Range 
Dim TopLabelinColumn As Range 

For Each TopLabelinColumn In Range("A1:Z1").Cells 
    If TopLabelinColumn.Value Like "PO_NUMBER" Then 
     TopLabelinColumn.Value = "PO" 
     PONumberCell = TopLabelinColumn.Address 

     Set PONumberAddress = Range(PONumberCell) 
     PONumberAddress.Columns.ColumnWidth = 70 
    End If 
Next TopLabelinColumn 

End Sub 
+0

definitiv, nur ein paar Mal debugged es um sicherzustellen, dass es richtig funktioniert. –

+0

Ich hatte nicht einmal bemerkt, dass die Ein-Zeile 'If' - ich nur den Code gelesen habe, als ob es ein Multi-Line war! – YowE3K

+0

@ YowE3K Wie spät ist es dein Platz? –

Verwandte Themen