Musiałem mieć makro Excela do wstawienia obrazu w Excelu. Włączyłem rejestrator makr, wstawiłem zdjęcie. Ale kiedy użyłem tego nagranego kodu, obraz nie pojawi się na żadnym innym komputerze. Zamiast tego dostaję czerwony X tam, gdzie powinno być zdjęcie.
Kod używany do pracy w programie Excel 2007 lub wcześniejszym. Ale coś się zmieniło w Excelu 2010. Kiedy uruchamiasz kod w ActiveSheet.Pictures.Insert, Excel * nie * wstawia obrazka. Zamiast tego wstawia link do obrazu.
Oczywiście po uruchomieniu kodu na komputerze wygląda na to, że wszystko działało. Pojawia się obraz.

Ale kiedy ktoś otworzy skoroszyt na innym komputerze, otrzyma czerwony znak X i komunikat, że obraz mógł zostać przeniesiony lub zmieniono jego nazwę.

Cóż, oczywiście obrazu nie ma na komputerze mojego menedżera. Nie prosiłem o to, żeby Excel utworzył łącze do zdjęcia. Poprosiłem o wstawienie obrazu w programie Excel. Ale zarejestrowany kod wstawia link do obrazu.
Rozwiązaniem jest przejście na inny kod. Używając Shapes.AddPicture, możesz określić LinkToFile:=msoFalse
. Oto kod do użycia:
Sub HowToInsertPicture() ' This code fails in 2010 or newer ' ActiveSheet.Pictures.Insert( _ ' "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp").Select NewFN = "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp" ActiveSheet.Shapes.AddPicture(Filename:=NewFN, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=1, Top:=1, Width:=140, Height:=195).Select End Sub
Obejrzyj wideo
Transkrypcja wideo
Naucz się programu Excel z podcastu, odcinek 2214: Naprawdę irytujący błąd VBA podczas próby wstawienia obrazu.
W porządku. Więc, hej, to zaczęło się dziać w Excelu 2010. Niedawno znowu mnie to spaliło.
Zamierzam więc wstawić obraz do tego skoroszytu, ale chcę zarejestrować tę akcję, aby móc to zrobić automatycznie. Widok, makra, makro rejestratora, HowToInsertAPicture. Doskonały. Zamierzam wstawić tutaj tylko obrazek: Ilustracje, Obrazy, wybierzmy jedno z naszych zdjęć rakiet i Wstaw. W porządku, zatrzymaj nagrywanie. Piękny. Teraz zamierzam się tego pozbyć. Chcę rzucić okiem na makra, więc Alt + F8, HowToInsertAPicture, Edit, i jest tak: ActiveSheet.Pictures.Insert, a następnie ścieżka do obrazu. W porządku. Tak, to brzmi dobrze. I faktycznie powinniśmy być w stanie to uruchomić. Więc Alt + 8, HowToInsertAPicture i Run, i otrzymujemy obraz - to jest piękne. Dopóki nie zapiszę tego skoroszytu i nie pozwolę ci go pobrać lub wysłać komuś innemu, a wtedy obraz przestaniew ogóle się nie pojawia - dostaję tylko czerwony X mówiący: Hej, nie możemy już znaleźć tego zdjęcia. Co masz na myśli, mówiąc, że nie możesz znaleźć zdjęcia? Prosiłem o wstawienie zdjęcia, a nie linku do zdjęcia. Jednak począwszy od programu Excel 2010 ten zarejestrowany kod w rzeczywistości wstawia łącze do obrazu. A jeśli otworzę ten skoroszyt gdzieś na komputerze, który nie ma dostępu do tego dysku i tego zdjęcia: czerwony X. Super irytujące.
W porządku. Tak więc, z jakiegoś powodu, w programie Excel 2010, nową rzeczą do zrobienia jest zamiast ActiveSheet.Pictures.Insert należy wykonać ActiveSheet.Shapes.AddPicture. W porządku. I nadal możemy określić nazwę pliku, ale wtedy te dodatkowe argumenty, które mamy: LinkToFile = msoFalse - innymi słowy, nie twórz głupiego czerwonego linku - a potem SaveWithDocument: = msoTrue - co oznacza, właściwie umieść tam cholerny obraz i mogą określić, gdzie ma być - lewa, góra…
A teraz, jak obliczymy wysokość i szerokość? W porządku. Cóż, chcemy proporcjonalnie zmienić rozmiar, prawda? Więc zamierzam przytrzymać klawisz Shift, na przykład, przywrócić mniej niż jeden ekran pełen danych, może tak właśnie tam. Więc to jest mój cel. Chcę wstawić obraz i mieć belkę o tym rozmiarze z wybranym. Wrócę do VBA Alt + F11, Ctrl + G dla bezpośredniego okna i zapytam o:? selection.width - czyli znak zapytania, spacja, szerokość kropki wyboru i znak zapytania, wysokość kropki wyboru (? Selection.height). W porządku, a to mówi mi o 140 i 195, czyli o szerokości 140 i 195, tak. Pozbądź się bezpośredniego okna, a następnie tutaj usuniemy to i uruchomimy kod, który faktycznie go wstawił. Ma odpowiedni rozmiar, będzie można go otworzyć po pobraniu tego,lub pobieram to, jeśli nie masz dostępu do oryginalnego obrazu.
Rozumiem, rzeczy się zmieniają, musieli zmienić kod. Ale fakt, że nie zaktualizowali rejestratora makr, a rejestrator makr podał nam zły kod, to nie działa. To bardzo irytujące.
Cóż, hej, aby dowiedzieć się więcej o makrach, zapoznaj się z tą książką, Excel 2016 VBA Macros, autorstwa Tracy Syrstad i mnie. Właściwie mamy wersję tego dla każdej wersji, począwszy od Excela 2003. Więc cokolwiek masz, pod warunkiem, że jest to Windows, jest wersja dla Ciebie.
W porządku, podsumowanie dzisiaj - to mój problem. Nagrałem kod, aby wstawić obraz i tworzy łącze do obrazu, więc nikt inny, któremu wyślę skoroszyt, nie widzi tego obrazu. Zamiast tego używam rejestratora makr, który wykonuje ActiveSheets.Shape.Picture, używam tego nowego ActiveSheet.Shapes.AddPicture. Lub możemy określić LinkToFile, nie; zapisz z dokumentem, tak; i będziesz gotowy.
Cóż, hej, dzięki za oglądanie. Do zobaczenia następnym razem z kolejnym netcastem od.
Pobierz plik Excel
Aby pobrać plik Excela: vba-insert-picture-bug.xlsm
Wielokrotnie rejestrator makr w programie Excel rejestruje nieprawidłowy kod. Dzięki powyższej poprawce możesz z powodzeniem wstawiać obrazy za pomocą VBA.
Myśl dnia Excela
Poprosiłem moich znajomych z programu Excel Master o radę dotyczącą programu Excel. Dzisiejsza myśl do rozważenia:
„Excel jest narzędziem służącym ludziom, którzy muszą żyć z konsekwencjami”.
Oz du Soleil