Como fazer pasta de caminho universal?

0

Pergunta

Novo no VBA e tem uma atribuição para criar uma sub-rotina que cola a partir de uma pasta de trabalho em uma nova pasta de trabalho. Um requisito para salvar o arquivo, é que "o caminho da pasta de ser universal para que outras pessoas possam criar esta pasta também". O que a emenda que eu iria fazer para o ActiveWorkbook.Método 'guardar como' para cumprir isso? Obrigado

Sub pasteTable()

    Dim formatting As Variant 'create variable to hold formatting2 workbook path
    formatting = Application.GetOpenFilename()  'user is prompted and selects path to formatting2 workbook and assigns to formatting variable
    
    Workbooks.Open formatting  'formatting2 workbook is now active
    Worksheets("Formatting").Range("B3:R13").Copy  'copies table from formatting2 workbook
    Workbooks.Add  'add new workbook
    
    Worksheets(1).Range("B3:R13").Select  'selects range on worksheet of new workbook to paste table
    Selection.PasteSpecial xlPasteAll 'pastes table
    
    Columns("B:R").ColumnWidth = 20  'ensures table has proper row and column heights/widths
    Rows("3:13").RowHeight = 25
    
    Worksheets(1).Name = "Table Data"  'renames worksheet
        
    ActiveWorkbook.SaveAs "C:\Users\name\Desktop\names Excel Assessment VBA\names Excel Assessment VBA " & Format(Date, "dd/mmm/yyyy"), FileFormat:=xlOpenXMLWorkbookMacroEnabled
    'saves workbook according to desired specifications
End Sub
excel vba
2021-11-24 03:27:40
2
0

Alterar o seu Save para isso:

ActiveWorkbook.SaveAs "C:\Users\" & Environ("Username") & "\Desktop\Excel Assessment VBA\Excel Assessment VBA " & Format(Date, "dd-mmm-yyyy") & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

O Username o sistema variável de ajuste dependendo da conta do Windows que está em uso. Apenas certifique-se de que cada usuário tem as pastas existentes no seu ambiente de trabalho, ou você vai obter um erro. Eu também removido names dos nomes de pastas como eu suponho que você estava tentando fazer algo com o nome de usuário lá também. Você pode ajustar as suas necessidades.

O formato de Data que é necessário mudar muito como era incluindo caracteres inválidos.

Você também esqueceu de incluir uma extensão de arquivo, então eu adicionei que bem.

Há muita coisa acontecendo com essa linha, incluindo uma grande quantidade de erros, de modo que você vai ter de jogar com ele um pouco até que você obtenha exatamente o que você precisa. Você pode querer simplificar um pouco, até você pegar o jeito de todas as coisas.

2021-11-24 06:52:45
0

Eu acho que você tem que adicionar mais algumas verificações

O script espera que o nome da ferramenta-caminho-a pasta como uma constante ToolFolder.

Mais uma segunda constante ToolBaseFolder o que poderia ser definido como o pai-caminho `ToolFolder, por exemplo, um caminho de rede. Se a const está vazia, os usuários da área de trabalho vai ser usado.

Se esse caminho ainda não existir, será criado.

Option Explicit

Private Const ToolBaseFolder As String = "" 'if ToolBaseFolder is an empty string desktop will be used instead
Private Const ToolFolder As String = "MyNameForToolFolder"


Public Sub testWbToToolFolder()
'this is just for testing
Dim wb As Workbook: Set wb = ActiveWorkbook
saveWbToToolFolder wb, "test.xlsx"
End Sub


Public Sub saveWbToToolFolder(wb As Workbook, filename As String)
'you don't need this sub - but have the same code line in your main routine
wb.SaveAs getToolFolder & filename
End Sub



Public Function getToolFolder() As String
'this returns the toolfolder e.g. C:\Users\xyz\Desktop\MyNameForToolFolder

Dim basepath As String
basepath = ToolBaseFolder & "\"

If existsFolder(basepath) = False Then
    If LenB(ToolBaseFolder) > 0 Then
        MsgBox ToolBaseFolder & " does not exist." & vbCrLf & _
            "File will be saved to " & ToolFolder & " on desktop ", vbExclamation
    End If
    basepath = getDesktopFolderOfUser
End If

Dim fullpath As String
fullpath = basepath & ToolFolder & "\"

If existsFolder(fullpath) = False Then
    makeFolder fullpath
End If

getToolFolder = fullpath

End Function


Private Function existsFolder(path As String) As Boolean
If Len(path) < 2 Then Exit Function 'can't be a valid folder
existsFolder = LenB(Dir(path, vbDirectory)) > 0
End Function

Private Function getDesktopFolderOfUser() As String
getDesktopFolderOfUser = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
End Function

Private Function makeFolder(path As String)
'https://stackoverflow.com/a/26934834/16578424 plus comment from rayzinnz
CreateObject("WScript.Shell").Run "cmd /c mkdir """ & path & """", 0, True
End Function

2021-11-24 04:46:46

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................