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

Visual Basic a Exel

wojtekf117 03 Sty 2009 16:34 6003 10
  • #1 03 Sty 2009 16:34
    wojtekf117
    Poziom 9  

    Witam wszystkich mam małe pytanko :


    Dołaczyłem plik.
    Jak ma wygladać skaładnia programu abym mogł po kliknieciu przycisku Command1 pokazały sie w polach tekstowych zawartośc komorek (w tym przypadku A1 i B1) z konkretnego pliku exela i z konkretnego arkusza tego pliku.

    Dzieki za pomoc

    Visual Basic a Exel

    Proszę przeczytać i stosować...
    Ogłoszenie: Wklejanie zdjęć.
    Następne naruszenie tego punktu to automatyczne skazanie się na uzyskanie ostrzeżenia....
    [K!lleR]

    0 10
  • Relpol
  • #2 03 Sty 2009 18:43
    adamas_nt
    Moderator Programowanie

    Poczytaj to: link (pdf). Interesujący Cię temat rozpoczyna się od str.16
    Oczywiście Excel zainstalowany i w menu VB Project lub Tools>References zaznaczone "Microsoft Excel xx Object Library".

    0
  • #3 04 Sty 2009 13:58
    wojtekf117
    Poziom 9  

    Dzięki za materiały sporo mi dały, ale nadal nie wiem ja mam wpisać konkretna komorke z konkretnego arkusza i z konkretnego pliku excela bo te materiały tyczyły się tylko aktywnej komórki.

    Jakbyś coś więcej miał to daj znać.

    Dzięki za wszystko

    0
  • Relpol
  • #4 04 Sty 2009 17:04
    adamas_nt
    Moderator Programowanie

    Najpierw musisz zadeklarować zmienną typu 'object' Np przy załadowaniu formularza. W VBA wygląda to mniej więcej tak:

    Code:
    Private Sub UserForm_Initialize()
    
    Dim objExcel As Object
    Set objExcel = GetObject("c:\katalog1\proba.xls")
    End Sub

    W linku, który Ci podałem pisze jak to zrobić w VB. W nawiasie podajesz ścieżkę i nazwę pliku. Po otwarciu formularza masz dostęp do wszystkich arkuszy, modułów, makr, formularzy zawartych w pliku: proba.xls
    Sposoby odwołania do arkuszy i komórek też są opisane w tym linku. Ale jak już zacząłem...
    Code:
    Private Sub Command1_Click()
    
    txtBox1 = Workbooks("proba.xls").Worksheets("Arkusz1").Range("A1").Value
    End Sub
    Gdzie 'txtBox1' to nazwa pola tekstowego a 'Command1' przycisku polecenia w formularzu.

    0
  • #5 05 Sty 2009 18:18
    wojtekf117
    Poziom 9  

    witaj dzieki:

    ale u mnie to nie dziala powiec co jest nie tak

    Wpisałem tak

    Private Sub UserForm_Initialize()
    Dim objExcel As Object
    Set objExcel = GetObject("c:\Zeszyt1.xls")
    End Sub

    Private Sub Command1_Click()

    Text1.Text = Workbooks("Zeszyt1.xls").Worksheets("Arkusz1").Range("A1").Value
    End Sub


    pomocy prosze

    0
  • #6 05 Sty 2009 19:55
    adamas_nt
    Moderator Programowanie

    Nie mam zainstalowanego VB ale wnioskuję, że:
    Dim objExcel As Object
    deklarujesz w sekcji 'General'
    I wtedy:

    Code:
    Private Sub Command1_Click()
    
    Set objExcel = GetObject("c:\Zeszyt1.xls")
    Text1.Text = objExcel.Worksheets("Arkusz1").Range("A1").Value
    End Sub
    powinno zadziałać...
    Umieszczenie:
    Set objExcel = GetObject("c:\Zeszyt1.xls")
    w sekcji 'Form Load' i
    Text1.Text = objExcel.Worksheets("Arkusz1").Range("A1").Value
    pod przyciskiem też powinno.
    Napisz, jeżeli nie działa.
    ................
    Edit

    Całość powinna wyglądać (chyba) tak:
    Code:
    Dim objExcel As Object
    

    Private Sub Command1_Click()
    Text1.Text = objExcel.Worksheets("Arkusz1").Range("A1").Value
    End Sub

    Private Sub Form_Load()
    Set objExcel = GetObject("c:\Zeszyt1.xls")
    End Sub

    0
  • #7 05 Sty 2009 21:33
    wojtekf117
    Poziom 9  

    dzieki wielkie :)
    udalo sie i dzial tak jak chcialem

    pierwszy kod zadzialal.

    ps.

    0
  • #8 05 Sty 2009 21:43
    marek003
    Poziom 40  

    Nie dużo wiem o VB ale...

    Zadziałało ci bez aktywowania?

    Pierwszy kod tzn który?

    Podrzuć przykład bo mi działa przy takich kodach:

    Code:
    Private Sub UserForm_Initialize()
    
    GetObject ("c:\zeszyt1.xls")
    End Sub

    Private Sub CommandButton1_Click()
    Workbooks("zeszyt1.xls").Activate
    TextBox1 = Worksheets("Arkusz1").Range("A1").Value
    TextBox2 = Worksheets("Arkusz1").Range("B1").Value
    End Sub

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Workbooks("zeszyt1.xls").Close
    End Sub



    Dodano po czasie
    ------------------------------------------------------------

    Już wiem - taki kod wystarczy:

    Code:
    Private Sub CommandButton1_Click()
    

    GetObject ("c:\a.xls")

    TextBox1 = Workbooks("a.xls").Worksheets("Arkusz1").Range("A1").Value
    TextBox2 = Workbooks("a.xls").Worksheets("Arkusz1").Range("B1").Value

    Workbooks("a.xls").Close

    End Sub


    lub (bardziej "profesjonalnie")

    Code:
    Private Sub CommandButton1_Click()
    

    Set a = GetObject ("c:\a.xls")

    TextBox1 = a.Worksheets("Arkusz1").Range("A1").Value
    TextBox2 = a.Worksheets("Arkusz1").Range("B1").Value

    a.Close

    End Sub


    Zaznacze że warto zamknąć otwarty w pamięci plik bo po co ma zajmować miejsce ( to widać w VB excela - jak się nie zamknie plik a.xls jest cały czas otwarty)

    0
  • #9 05 Sty 2009 22:20
    adamas_nt
    Moderator Programowanie

    Tak masz zasięg w całym formularzu (i projekcie, dopóki formularz jest otwarty):

    Code:
    Private Sub UserForm_Initialize()
    
    GetObject ("c:\zeszyt1.xls")
    Workbooks("zeszyt1.xls").Activate
    End Sub

    Private Sub CommandButton1_Click()
    TextBox1 = Worksheets("Arkusz1").Range("A1").Value
    TextBox2 = Worksheets("Arkusz1").Range("B1").Value
    End Sub

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Workbooks("zeszyt1.xls").Close
    End Sub
    (i możesz umieszczać Kombi z listami i inne takie...)
    Tak jak napisałeś działa tylko w przycisku
    ............
    Edit
    'QueryClose' dlatego, że VBA otwiera łącze obiektu typu Excel jako kwerendę. Nawet nie trzeba deklarować zmiennej. Za to go lubię...

    0
  • #10 20 Mar 2009 12:39
    AJs
    Poziom 10  

    Witam. uczę się programowania od 2 dni bo potrzebowałem ułatwić sibie zadanie. stworzyłem takie program

    Code:

    Sub konta()
    Dim numer As String
        Dim wiersz, kolumna As String
    Dim x, y As Long
    Dim a As Byte
    Dim varWcisniety, varID As Variant

    podaj:
    podajnr.Show
    numer = Range("A29")
    If numer = "" Then
    varWcisniety = MsgBox("Nie podałeś numeru", vbRetryCancel + vbInformation, "Błąd!") 'błąd z pytaniem co chcesz zrobić
    End If
    Select Case varWcisniety
    Case 4
    GoTo podaj
    Case 2
    GoTo koniec
    End Select
    Range("A29").Value = Empty


    Windows("Zlecenia wystawione TE 2009.xls").Activate 'przełączenie się do innego pliku

    Sheets("RZ").Select 'przełączenie się do arkusza

    If Cells(numer, 9) = "" Then 'sprawdzenie czy jest takie zlecenie
    MsgBox "Podaj inny numer!", vbOKOnly + vbInformation, "Nie ma takiego konta!"
    GoTo podaj
    End If
    Range(Cells(numer, 9), Cells(numer, 15)).Copy

    Windows("automatycy.xls").Activate 'przełączenie do poprzedniego pliku
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    koniec:

    End Sub


    który po wpisaniu w okienko wyskakujące, numeru kopiuje mi odpowiednie komorki z tego wiersza. Ale nadal mam niedosyt chociaż program działa. Po pierwsze to program skopiuje te komorki pod warunkiem, że będę miał włączony ten plik. Po drugie jak widać w kodzie niewiedziałem jak zrobić żeby zmienna "numer" w general miała wartość nadaną po kliknięciu przycisku :/. może ktoś mi podpowiedzieć w jaki sposób to zrobić??

    0
  • #11 20 Mar 2009 13:02
    adamas_nt
    Moderator Programowanie

    Po pierwsze: Załóż nowy temat
    Po drugie:

    Code:
    podajnr.Show
    
    numer = Range("A29")

    Tu otwierasz UserForm (ładowanie pewnie jest w innej części kodu) i nie wiemy co tam się dzieje :) po czym pobierasz wartość z komórki. Teraz mamy domyślać się o co chodzi... Napisz trochę więcej.

    0
  Szukaj w 5mln produktów