Cara, acabei usando IA também…
Usei o DeepSeek e aprimorei o código para rodar em Linux e Windows. Sou bancário e frequentemente mudo de S.O. conforme a estação de trabalho.
Esse foi o código que atendeu a minha especifidade, pode ser útil para outra pessoa:
Function GetOS() As String
’ Função robusta para detectar sistema operacional
On Error Resume Next
Dim testObj As Object
testObj = CreateObject(“WScript.Shell”)
If Err.Number = 0 Then
GetOS = “Windows”
Else
GetOS = “Linux”
End If
On Error GoTo 0
End Function
Sub CriarPastasGSV_Universal
Dim oSheet As Object
Dim oRange As Object
Dim sBasePath As String
Dim i As Integer
Dim sFolderName As String
Dim oFileService As Object
' 1. Configurar caminho conforme o sistema operacional
If GetOS() = "Windows" Then
Dim oShell As Object
oShell = CreateObject("WScript.Shell")
sBasePath = oShell.SpecialFolders("MyDocuments") & "\GSV\"
Else
sBasePath = "/home/" & Environ("USER") & "/Documentos/GSV/"
End If
' 2. Acessar planilha e intervalo
oSheet = ThisComponent.CurrentController.ActiveSheet
oRange = oSheet.getCellRangeByName("B2:I2")
oFileService = createUnoService("com.sun.star.ucb.SimpleFileAccess")
' 3. Criar pasta base se não existir
If Not oFileService.exists(sBasePath) Then
oFileService.createFolder(sBasePath)
End If
' 4. Processar células e criar pastas
For i = 0 To oRange.getColumns().getCount() - 1
sFolderName = Trim(oRange.getCellByPosition(i, 0).getString())
If sFolderName <> "" And sFolderName <> "-" Then
Dim sFullPath As String
sFullPath = sBasePath & sFolderName
If Not oFileService.exists(sFullPath) Then
oFileService.createFolder(sFullPath)
End If
End If
Next i
' 5. Confirmação final
MsgBox "Pastas criadas com sucesso em " & sBasePath, 0, "Concluído"
End Sub
Como funciona:
-
Detecção do SO:
- A função
GetOS()
verifica a variável de ambiente PATH
- Se contiver “:” (típico de caminhos Windows), identifica como Windows
- Caso contrário, assume Linux/Unix
-
Caminhos adaptativos:
- Windows: Usa
MyDocuments\GSV\
- Linux: Usa
/home/[usuário]/Documentos/GSV/
-
Lógica unificada:
- O restante do código é comum para ambos os sistemas
- Mantém todas as otimizações pedidas (apenas um MsgBox final)
Benefícios:
- Única macro para todas as plataformas
- Detecção automática do ambiente
- Mantém a eficiência (sem caixas de diálogo intermediárias)
- Mensagem final mostra o caminho exato onde as pastas foram criadas
Observação: A macro presume que no Linux o usuário tenha uma pasta “Documentos” dentro do seu home directory (padrão em distribuições como OpenSUSE). Caso seu Linux use outro nome (ex: “Documents”), basta ajustar o caminho no código.