excel - zamiana tekstu na aktywną formułę

excel - zamiana tekstu na aktywną formułę

Wątek przeniesiony 2024-06-25 13:54 z Inne języki programowania przez cerrato.

K9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Dzień dobry.

Chciałam prosić o pomoc w rozwiązaniu problemu z przerabianiem zawartości komórek określonego zakresu. Musze napisać makro, które sumuje wartości podane w tabeli, niestety są one podawane w proporcjach jako tekst (rysunek 1).
Zaczęłam od stworzenia nowej tabeli, której wartość w każdej komórce poprzedziłam znakiem równości --> ="="&B2....., następnie skopiowałam tabelę i użyłam opcji wklej specjalnie (wartości). Pozostałam jednak z tabelą, która wygląda jak na obrazku nr 2. Tak jak widać w pierwszych kolumnach, kombinowałam z "Tekst jako kolumny", żeby zamiast formuły wyświetlały mi się wartości. Niestety w tym przypadku konieczne jest zaznaczanie i powtarzanie czynności dla każdej kolumny.
Czy jest jakiś inny sposób?

Z góry bardzo dziękuję za wskazówki :)

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1
Kopiuj
For Each c in Selection
   c.Formula="="&c.value
Next
K9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Dziękuję!

K9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Wydaje mi się, że moja pętla trwa w nieskończoność.... Jak stosuje kod w oddzielnym arkuszu wszystko działa jak należy. Po wklejeniu do formatki proces się zapętla i wiesza mi się plik. Czy mogę jakoś temu zapobiec?

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1

Zaznacz tylko te komórki, krtóre chcesz zamienić, wykonaj kod. Nic więcej. Jeśli będzie trwało długo, to przed tą pętlą daj:

Kopiuj
Application.ScreenUpdating = False

Po niej włącz odświeżanie z powrotem:

Kopiuj
Application.ScreenUpdating = True

i jeszcze możesz przeliczanie arkusza na ręczne ustawić, czyli:

Kopiuj
Application.Calculation = xlCalculationManual

a potem przywrócić takie, jak miałaś. (xlCalculationSemiautomatic lub xlCalculationAutomatic - raczej to drugie)

K9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Dziękuję bardzo za dotychczasową pomoc. Bardzo dużo mnie nauczyła. Nie chciałabym nadużywać uprzejmości, ale wyskakuje mi błąd i siedzę od wczoraj zmieniając sposoby definiowania, zaznaczania itp. już się zniechęciłam i poddałam.....
Wszystko liczy jak trzeba (dzięki ostatniej wskazówce błyskawicznie) niestety wyskakuje mi ciągle 'run time error 1004'.
Obawiam się, że znowu rozwiązanie jest bardzo proste, a mój błąd błahy, ale nie mogę tego naprawić....

screenshot-20200318091334.png

Byłabym wdzięczna za pomoc. Obiecuję, że postaram się już zamknąć ten temat ;)

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1

Zamień:

Kopiuj
For Each c in Selection
   c.Formula="="&c.value
Next

Na:

Kopiuj
MsgBox Selection.Address ' tylko aby sprawdzić, że dobry zakres został wybrany
For Each c in Selection
On error resume next
   c.Formula="="&c.value
if Err.Number<>0 Then MsgBox "Komórka:" & c.Address &vbNewLine & "Zawartość: " & c.Value
On error goto 0
Next

To Ci w miarę pokaże, gdzie masz problem

K9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Problem rozwiązany. Bardzo dziękuję za pomoc.
Nie zdawałam sobie sprawy, że przesyłana tabela jest robiona ręcznie. Myślałam, że dane są wyciągnięte z systemu i nie ma błędów w komórkach. Jedna zawierała '. Taki mały znak, a tak dużo czasu pochłonął....
Jeszcze raz dziękuję :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.