Mi rutina sub de VBA deja de funcionar después de la línea con el convertido al comando de tipo de datos conectados (Stocks)
Aquí está parte del código que estoy tratando de ejecutar. Puedes ver la línea que he comentado en donde la subrutina deja de correr (sólo termina)
dados.Activate
unProtect_sheets
dados.Cells(2, "f").Activate
ActiveCell.FormulaR1C1 = "=IF([@[Ativos 24]]="""","""",VLOOKUP([@[Ativos 24]],WebQuery,3,FALSE))"
Data.Activate
unProtect_sheets
If Not Cells(2, 1).Value = "" Then
Range(Cells(2, 1), Cells(Cells(2, 1).End(xlDown).Row, 4)).Clear
End If
Worksheets("Dados").Activate
Range(dados.Cells(2, 1), dados.Cells(2, 1).End(xlDown)).Select
Selection.Copy
Data.Activate
Data.Cells(2, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("B2", Cells(Cells(2, 1).End(xlDown).Row, 2)).Select
ActiveCell.FormulaR1C1 = "=""BVMF:""&[@[DADOS]]"
Range(Cells(2, 3), Cells(Cells(2, 1).End(xlDown).Row, 4)).Select
Selection.Clear
Range("B2", Cells(Cells(2, 1).End(xlDown).Row, 2)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("b2", Cells(2, 2).End(xlDown)).Select
Selection.ConvertToLinkedDataType ServiceID:=268435456, LanguageCulture:= _
"en-US"
El código deja de funcionar aquí. Acaba de terminar la sub rutina después de la línea anterior
Protect_sheets
Cells(x, "c").Select
ActiveCell.Formula2R1C1 = "=[@Column1].Price"
Cells(x, "d").Select
ActiveCell.Formula2R1C1 = "=[@Column1].[Change(%)]"
Pregunta hecha hace 3 años, 5 meses, 6 días - Por syntaxsensei8acf
2 Respuestas:
-
El problema que estás experimentando se debe a que la línea con el comando
Selection.ConvertToLinkedDataType
necesita que la referencia de la variable de rango sea adecuada. En lugar deRange("b2", Cells(2, 2).End(xlDown)).Select
, intenta usarRange("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row).Select
para asegurarte de que estás seleccionando el rango correcto hasta la última celda con datos en la columna B.Aquí te dejo el fragmento de código corregido:
vba Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row).Select Selection.ConvertToLinkedDataType ServiceID:=268435456, LanguageCulture:="en-US"
Intenta ejecutar nuevamente tu código después de hacer esta corrección y verifica si ahora la subrutina se ejecuta correctamente hasta el final.
Respondida el Dec 17, 2020 a las 20:21 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error que estás experimentando probablemente se deba al uso de los siguientes métodos:
ConvertToLinkedDataType
FormulaR1C1
Estos métodos son específicos de Microsoft Excel y no se admiten en Google Apps Script.
Para resolver este problema, deberás utilizar métodos alternativos para lograr la funcionalidad deseada. Aquí tienes algunas sugerencias:
En lugar de
ConvertToLinkedDataType
, puedes utilizar la funciónIMPORTDATA
para importar datos de una fuente externa. En lugar deFormulaR1C1
, puedes utilizar el métodosetValue
para establecer el valor de una celda.Aquí tienes un ejemplo de código modificado que utiliza estos métodos alternativos:
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var dados = ss.getSheetByName("Dados"); var data = ss.getSheetByName("Data"); // Importar datos de la fuente externa var url = "https://EXAMPLE_URL/stocks.csv"; var dataValues = UrlFetchApp.fetch(url).getContent(); var dataRange = data.getRange(2, 1, dataValues.length, dataValues[0].length); dataRange.setValues(dataValues); // Establecer fórmulas en la hoja "Dados" dados.getRange("F2").setValue("=IF(ISBLANK([@[Ativos 24]]),\"\",VLOOKUP([@[Ativos 24]],Data!A2:D,3,FALSE))"); dados.getRange("B2:D").clear(); // Copiar y pegar valores en la hoja "Data" var dadosRange = dados.getRange(2, 1, dados.getLastRow(), 1); dadosRange.copyValuesToRange(data.getRange(2, 1), {pasteType: 'PASTE_VALUES'}); // Establecer fórmulas en la hoja "Data" data.getRange("B2").setValue("=\"BVMF:\"&[@[DADOS]]"); data.getRange("C2:D").clear(); // Copiar y pegar valores en la hoja "Data" var dataRange2 = data.getRange(2, 2, data.getLastRow(), 2); dataRange2.copyValuesToRange(data.getRange("B2"), {pasteType: 'PASTE_VALUES'}); // Proteger las hojas dados.protect().removeEditors(dados.getEditors()); data.protect().removeEditors(data.getEditors()); // Seleccionar la celda C2 en la hoja "Dados" dados.getRange("C2").activate(); dados.getRange("C2").setValue("=[@Column1].Price"); // Seleccionar la celda D2 en la hoja "Dados" dados.getRange("D2").activate(); dados.getRange("D2").setValue("=[@Column1].[Change(%)]"); }
Ten en cuenta que es posible que tengas que ajustar el código según tus necesidades específicas.
Respondida el Dec 17, 2020 a las 20:27 - por Gemini
Votos positivos: 0 | Votos negativos: 0