Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[vba excel] Przekazywanie zakresu komórek do procedury

jakobs84 09 Sie 2011 17:02 2891 1
  • #1 09 Sie 2011 17:02
    jakobs84
    Poziom 11  

    Witam

    Mam makro która wstawia obrazek w określone miejsce w arkuszu i skaluje go.

    Problem polega na tym że jest na sztywno zdefiniowane z jakiej komórki ma pobrać adres pliku
    "Inf!A29" = C:\Documents\SNC00056.jpg i w jakie komórce jest zakres gdzie wstawić
    "Inf!H23" = A1:D10. Dal 5 obrazków musiał bym zdefiniować 5 takich procedur jak przekazać adres i zakres "w locie" dla jednej procedury/funkcji

    Code:


    Sub Grafika()

    kom = Range("Inf!H23") ' Pobranie zakresu miejsca dla obrazka
     Sheets("DOK").Select
     Set Grafi = ActiveSheet.Pictures.Insert(Range("Inf!A29")) 'Pob dresu dla pliku
     With Grafi
     .Top = Range(kom).Top
     .Left = Range(kom).Left
     .ShapeRange.LockAspectRatio = msoFalse
     .ShapeRange.Width = Range(kom).Width
     .ShapeRange.Height = Range(kom).Height
     End With
    End Sub



    Pozdrawiam i czekam na pomoc

    Dodano po 1 [godziny] 47 [minuty]:

    Znalazłem sposób na przekazanie zmiennych ale nie mogę przekazać zmienne Y - zakresu. Przyczyny upatruje w typie zmiennej albo w sposobie przypisania

    Code:

    Private Sub CommandButton8_Click()
    'WskazPlik ("Ala", "Test")
     Y = funkcja4(Range("Inf!A34"), Range("Inf!B34"), Range("Inf!C34"))
    'MsgBox y
    End Sub

    Function funkcja4(X, Y As Range, Z As String) As String
      '  MsgBox X
        MsgBox Y
      MsgBox Y.Top
    If Dir(X, vbHidden) = "" Then
          MsgBox "Brak pliku: " & X
           Else
     Sheets("DOK").Select
     Set Grafi = ActiveSheet.Pictures.Insert(X)
     With Grafi
     .Name = Z
     .Top = Y.Top
     .Left = Y.Left
     .ShapeRange.LockAspectRatio = msoFalse
     .ShapeRange.Width = Y.Width
     .ShapeRange.Height = Y.Height
     End With
    End If

    End Function


    Pozmieniały sie trochę adresy komórek ale to mało istotne

    0 1
  • #2 10 Sie 2011 00:15
    adamas_nt
    Moderator Programowanie

    Jaka wersja Excela? Jak VBA akceptuje to: Range("Inf!H23")? Zwykle zapisuje się Sheets("Inf").Range("H23"). Właściwość Top, Left, Whide, itd powinna być zdaje się liczbą (typu Single).

    Spróbuj wpisać nazwy obiektów do tablicy (Array) i wykorzystać pętlę For, coś na wzór:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0